#include <iostream>
#include <vector>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
using namespace std;


int main()
{
    printf("这是进程开始代码\n");
    
    //execl("/usr/bin/ls", "ls", "-a", "-l", "--color=auto", NULL); 
    //exit(1);
    execl("/usr/bin/top", "top", NULL);

    printf("这是进程结束代码\n");



    return 0;
}

















//typedef void(*handler_t)();//函数指针类型
//
//vector<handler_t> handlers;//函数指针数组
//
//void func1()
//{
//    printf("临时任务1\n");
//}
//
//void func2()
//{
//    printf("临时任务2\n");
//}
//
////设置对应的方法回调
//void Load()
//{
//    handlers.push_back(func1);
//    handlers.push_back(func2);
//}
//
//int main()
//{
//    pid_t id = fork();
//
//    if(id == 0)
//    {
//        //子进程
//        int cnt = 5;
//        while(cnt)
//        {
//            printf("%d, 我是子进程，pid:%d, ppid:%d\n", cnt--, getpid(), getppid());
//            sleep(1);
//        }
//        exit(10);
//    }
//    else 
//    {
//        //父进程
//        int quit = 0;
//        while(!quit)
//        {
//            int status = 0;
//            pid_t ret = waitpid(id, &status, WNOHANG);
//            if(ret > 0)
//            {
//                //等待成功 && 子进程退出
//                quit = 1;
//                printf("等待成功，子进程退出，退出码:%d\n", WEXITSTATUS(status));
//            }
//            else if(ret == 0)
//            {
//                //等待成功 && 子进程未退出
//                printf("子进程还未退出，父进程可以先处理其他事\n");
//                
//                if(handlers.empty())
//                {
//                    Load();
//                }
//                
//                for(auto e : handlers)
//                {
//                    //处理其他任务
//                    e();
//                }
//            }
//            else 
//            {
//                //等待失败
//                printf("等待失败\n");
//                quit = 1; 
//            }
//            sleep(1);
//        }   
//    
//    }
//}
//    
    
    
    
    
    
    
    
    
    
//    else 
//    {
//        //父进程
//        int status = 0;
//        //id > 0 等待指定进程，id == -1 等待任意子进程退出，等价于wait()
//        //options:默认为0，代表阻塞等待，WNOHONG:代表非阻塞等待
//        pid_t ret = waitpid(id, &status, 0);//默认是阻塞等待
//        if(ret > 0)
//        {
//            //printf("等待成功，子进程退出码:%d\n", (status >> 8) & 0xff);
//            if(WIFEXITED(status))
//            {
//                //子进程正常退出
//                printf("子进程执行结束，退出码:%d\n", WEXITSTATUS(status));
//            }
//            else 
//            {
//                printf("子进程异常退出\n");
//            }
//        }
//    }       
//
//}
